/*
 * ==========================================================================*\
 * | $Id$
 * |*-------------------------------------------------------------------------*|
 * | Copyright (C) 2009 Virginia Tech | | This file is part of CloudSpace. | |
 * CloudSpace is free software; you can redistribute it and/or modify | it under
 * the terms of the GNU General Public License as published | by the Free
 * Software Foundation; either version 3 of the License, or | (at your option)
 * any later version. | | CloudSpace is distributed in the hope that it will be
 * useful, | but WITHOUT ANY WARRANTY; without even the implied warranty of |
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | GNU General
 * Public License for more details. | | You should have received a copy of the
 * GNU General Public License | along with CloudSpace; if not, see
 * <http://www.gnu.org/licenses/>.
 * \*==========================================================================
 */

package cloudspace.vm.filesystem;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.AccessControlException;

import cloudspace.security.CloudController;


// -------------------------------------------------------------------------
/**
 * A writer implementation for {@link CSPath}s that checks write permissions for
 * the resource before opening.
 * 
 * @author Mike Woods
 * @author Last changed by $Author$
 * @version $Revision$, $Date$
 */
public class CSPathOutputStream extends OutputStream
{
    // ~ Constructors ..........................................................

    // ----------------------------------------------------------
    public CSPathOutputStream( CSPath path )
        throws IOException,
        AccessControlException
    {
        CloudController.checkWrite( path );

        fileOutput = new FileOutputStream( path.getPhysicalFile() );
    }


    // ~ Methods ...............................................................

    // ----------------------------------------------------------
    public void close() throws IOException
    {
        fileOutput.close();
    }


    // ----------------------------------------------------------
    public void write( byte[] bbuf, int off, int len ) throws IOException
    {
        fileOutput.write( bbuf, off, len );
    }


    // ----------------------------------------------------------
    @Override
    public void write( int arg0 ) throws IOException
    {
        fileOutput.write( arg0 );
    }

    // ~ Static/instance variables .............................................

    private FileOutputStream fileOutput;

}
